home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / mvaders / frmmain.frm < prev    next >
Text File  |  1997-08-30  |  16KB  |  529 lines

  1. VERSION 2.00
  2. Begin Form frmMain 
  3.    BorderStyle     =   3  'Fixed Double
  4.    Caption         =   "MVaders -- Can You Save The World?  A Game by Mark Meany."
  5.    ClientHeight    =   5460
  6.    ClientLeft      =   990
  7.    ClientTop       =   1770
  8.    ClientWidth     =   7395
  9.    Height          =   6150
  10.    Icon            =   FRMMAIN.FRX:0000
  11.    KeyPreview      =   -1  'True
  12.    Left            =   930
  13.    LinkTopic       =   "Form1"
  14.    MaxButton       =   0   'False
  15.    ScaleHeight     =   5460
  16.    ScaleWidth      =   7395
  17.    Top             =   1140
  18.    Width           =   7515
  19.    Begin PictureBox picLoader 
  20.       AutoRedraw      =   -1  'True
  21.       AutoSize        =   -1  'True
  22.       Height          =   1155
  23.       Left            =   480
  24.       ScaleHeight     =   1125
  25.       ScaleWidth      =   1545
  26.       TabIndex        =   3
  27.       Top             =   5640
  28.       Visible         =   0   'False
  29.       Width           =   1575
  30.    End
  31.    Begin PictureBox picStatus 
  32.       AutoRedraw      =   -1  'True
  33.       BackColor       =   &H00000000&
  34.       Height          =   375
  35.       Left            =   60
  36.       ScaleHeight     =   345
  37.       ScaleWidth      =   7245
  38.       TabIndex        =   1
  39.       Top             =   60
  40.       Width           =   7275
  41.       Begin Label lblDebug 
  42.          BackStyle       =   0  'Transparent
  43.          FontBold        =   -1  'True
  44.          FontItalic      =   0   'False
  45.          FontName        =   "Courier New"
  46.          FontSize        =   8.25
  47.          FontStrikethru  =   0   'False
  48.          FontUnderline   =   0   'False
  49.          ForeColor       =   &H00FFFFFF&
  50.          Height          =   255
  51.          Left            =   420
  52.          TabIndex        =   2
  53.          Top             =   60
  54.          Width           =   6555
  55.       End
  56.    End
  57.    Begin PictureBox picGame 
  58.       AutoRedraw      =   -1  'True
  59.       BackColor       =   &H00000000&
  60.       Height          =   4995
  61.       Left            =   60
  62.       Picture         =   FRMMAIN.FRX:0302
  63.       ScaleHeight     =   331
  64.       ScaleMode       =   3  'Pixel
  65.       ScaleWidth      =   483
  66.       TabIndex        =   0
  67.       Top             =   420
  68.       Width           =   7275
  69.    End
  70.    Begin Timer tmrGameLoop 
  71.       Interval        =   50
  72.       Left            =   3120
  73.       Top             =   2520
  74.    End
  75.    Begin Menu mnuFile 
  76.       Caption         =   "&File"
  77.       Begin Menu mnuFileAbout 
  78.          Caption         =   "&About"
  79.       End
  80.       Begin Menu mnuFileSpacer 
  81.          Caption         =   "-"
  82.       End
  83.       Begin Menu mnuFileExit 
  84.          Caption         =   "E&xit"
  85.       End
  86.    End
  87.    Begin Menu mnuGame 
  88.       Caption         =   "&Game"
  89.       Begin Menu mnuGameNew 
  90.          Caption         =   "&New"
  91.       End
  92.       Begin Menu mnuGamePause 
  93.          Caption         =   "&Pause"
  94.       End
  95.       Begin Menu mnuGameAbort 
  96.          Caption         =   "&Abort"
  97.       End
  98.       Begin Menu mnuGameSpacer 
  99.          Caption         =   "-"
  100.       End
  101.       Begin Menu mnuGameOptions 
  102.          Caption         =   "&Options"
  103.       End
  104.    End
  105. End
  106. Option Explicit
  107.  
  108. Dim miBoss As Integer
  109.  
  110. Sub Form_Activate ()
  111.  
  112. 'Give initial instructions
  113. ShowGameOver
  114. picGame.Refresh
  115.  
  116. End Sub
  117.  
  118. Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
  119.  
  120. Debug.Print KeyCode
  121.  
  122. 'Act on keys we need to monitor
  123. Select Case KeyCode
  124.  
  125. Case KEY_CUR_LEFT   'Moving left
  126.     giKeyStatus = giKeyStatus Or KEY_CUR_LEFT_FLAG
  127.  
  128. Case KEY_CUR_RIGHT  'Moving right
  129.     giKeyStatus = giKeyStatus Or KEY_CUR_RIGHT_FLAG
  130.  
  131. Case KEY_FIRE       'Firing
  132.     'Fire button is disabled
  133.     If giFireLock Then Exit Sub
  134.     
  135.     'If game is not in progress, start it
  136.     If giGameStatus Then
  137.         If giGameStatus = GAME_STOPPED Then
  138.             picGame.Picture = LoadPicture("")
  139.             giLevel = 1
  140.             giScore = 0
  141.             giLives = 3
  142.             InitL1 0
  143.             tmrGameLoop.Interval = GamePrefs.iTimer
  144.         End If
  145.         giGameStatus = GAME_PLAYING
  146.     'Otherwise flag player is firing
  147.     Else
  148.         giKeyStatus = giKeyStatus Or KEY_FIRE_FLAG
  149.     End If
  150.  
  151. Case KEY_PAUSE      'Pausing the game
  152.     If Not giGameStatus Then giGameStatus = GAME_PAUSED
  153.  
  154. Case KEY_ABORT
  155.     giGameStatus = GAME_STOPPED
  156.  
  157. Case KEY_QUIT       'Quitting the game
  158.     tmrGameLoop.Enabled = False
  159.     frmMain.Hide
  160.  
  161. End Select
  162.  
  163. End Sub
  164.  
  165. Sub Form_KeyUp (KeyCode As Integer, Shift As Integer)
  166.  
  167. Select Case KeyCode
  168.  
  169. Case KEY_CUR_LEFT   'Moving left
  170.     giKeyStatus = giKeyStatus And (Not KEY_CUR_LEFT_FLAG)
  171.  
  172. Case KEY_CUR_RIGHT  'Moving right
  173.     giKeyStatus = giKeyStatus And (Not KEY_CUR_RIGHT_FLAG)
  174.  
  175. Case KEY_FIRE       'Firing
  176.     giKeyStatus = giKeyStatus And (Not KEY_FIRE_FLAG)
  177.     giFireLock = False
  178.  
  179. End Select
  180.  
  181. End Sub
  182.  
  183. Sub Form_Load ()
  184.  
  185. 'Center form on the screen
  186. CenterForm Me
  187.  
  188. End Sub
  189.  
  190. Sub mnuFileAbout_Click ()
  191.  
  192. 'If game is in progress then pause it
  193. If giGameStatus = GAME_PLAYING Then giGameStatus = GAME_PAUSED
  194.  
  195. 'Show the about window
  196. frmAbout.Show VBModal
  197.  
  198. End Sub
  199.  
  200. Sub mnuFileExit_Click ()
  201.  
  202. 'Just hide the form to quit
  203. tmrGameLoop.Enabled = False
  204. frmMain.Hide
  205.  
  206. End Sub
  207.  
  208. Sub mnuGameAbort_Click ()
  209.  
  210. 'Abort no matter what status we are in!
  211. giGameStatus = GAME_STOPPED
  212.  
  213. End Sub
  214.  
  215. Sub mnuGameNew_Click ()
  216.  
  217. 'Abort current game if in progress!
  218. giGameStatus = GAME_STOPPED
  219. DoEvents
  220.  
  221. 'And start a new one
  222. picGame.Picture = LoadPicture("")
  223. giLevel = 1
  224. giScore = 0
  225. giLives = 3
  226. InitL1 0
  227. tmrGameLoop.Interval = GamePrefs.iTimer
  228.  
  229. End Sub
  230.  
  231. Sub mnuGameOptions_Click ()
  232.  
  233. 'Pause game if in progress
  234. If giGameStatus = GAME_PLAYING Then
  235.     giGameStatus = GAME_PAUSED
  236.     giFireLock = True
  237. End If
  238.  
  239. 'Allow user to make changes
  240. frmOptions.Show VBModal
  241.  
  242. End Sub
  243.  
  244. Sub mnuGamePause_Click ()
  245.  
  246. 'Pause the game if in progress
  247. If giGameStatus = GAME_PLAYING Then giGameStatus = GAME_PAUSED
  248.  
  249. End Sub
  250.  
  251. Sub tmrGameLoop_Timer ()
  252.  
  253. Dim i As Integer
  254. Dim j As Integer
  255. Dim iDC As Integer
  256. Dim iX As Integer
  257. Dim iY As Integer
  258. Dim iXMin As Integer
  259. Dim iXMax As Integer
  260. Dim iYMax As Integer
  261. Static iDy As Integer
  262. Static iDx As Integer
  263. Static iToggle As Integer
  264. Static iDown As Integer
  265. Static iBonus As Integer
  266. Static iMod As Integer
  267.  
  268. Dim sDebug As String    'For debug only
  269.  
  270. 'Initialise invaders speed
  271. If iDx = 0 Then iDx = GamePrefs.iISpeed
  272. If iMod = 0 Then iMod = 10
  273.  
  274. 'Toggle is used for animation
  275. If iToggle Then iToggle = 0 Else iToggle = 1
  276.  
  277. 'Build status display
  278. lblDebug = "Lives: " & Format$(giLives, "") & "           HIGH: " & Format$(giHiScore, "00000") & "    Level: " & Format$(giLevel, "00") & "      Score: " & Format$(giScore, "00000")
  279.  
  280. 'Only process if game running
  281. If giGameStatus = GAME_PLAYING Then
  282.  
  283.     'Get working DC
  284.     iDC = picGame.hDC
  285.  
  286.     'Remove sprites
  287.     VBSprRestoreBgrnd iDC
  288.  
  289.     'Handle bonus ships
  290.     If iBonus = 0 Then
  291.         
  292.         'Reset counter for next bonus ship
  293.         iBonus = Int(Rnd * 40) + 20
  294.  
  295.         'Display bonus ship
  296.         If gVBSpr(BONUS_SHIP_ID).iActive = False Then VBSprActivateSprite iDC, BONUS_SHIP_ID, 0, 1
  297.  
  298.     Else
  299.         'Else just dec counter
  300.         iBonus = iBonus - 1
  301.     End If
  302.  
  303.     'If bonus ship is active, move it
  304.     If gVBSpr(BONUS_SHIP_ID).iActive Then
  305.         VBSprMoveSpriteRel BONUS_SHIP_ID, 8, 0, 18 + iToggle
  306.         If gVBSpr(BONUS_SHIP_ID).iX > ((picGame.Width \ Screen.TwipsPerPixelX) - 24) Then VBSprDeactivateSprite BONUS_SHIP_ID
  307.     End If
  308.  
  309.     'If explosion is active, animate it until all 3 frames shown
  310.     If gVBSpr(EXPLOSION_ID).iActive Then
  311.         gVBSpr(EXPLOSION_ID).iUser1 = gVBSpr(EXPLOSION_ID).iUser1 + 1
  312.         If gVBSpr(EXPLOSION_ID).iUser1 = 3 Then
  313.             gVBSpr(EXPLOSION_ID).iActive = False
  314.         Else
  315.             VBSprAnimateSprite EXPLOSION_ID, 14 + gVBSpr(EXPLOSION_ID).iUser1
  316.         End If
  317.     End If
  318.     
  319.     'Animate invaders
  320.     For i = FIRST_INVADER_ID To LAST_INVADER_ID
  321.         If gVBSpr(i).iW > 50 Then
  322.             VBSprAnimateSprite i, 20 + iToggle
  323.         Else
  324.             VBSprAnimateSprite i, 2 * ((i - FIRST_I